﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using PGI.EN.Usuario;

namespace PGI.AD.Usuario
{
    public class UsuarioAd
    {

        public static UsuarioEn Usuario_Login(string usuario, string password)
        {
            SqlCommand command = null;
            SqlConnection connection = null;
            SqlDataReader reader = null;

            string sql = "MntUsuarioSLogin";

            try
            {
                connection = DataBaseFactory.SqlOpenDatabase("PGI");

                command = new SqlCommand(sql, connection);
                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.AddWithValue("@Login", usuario);
                command.Parameters.AddWithValue("@Password", password);

                reader = command.ExecuteReader();
                UsuarioEn usuarioEn = null;

                if (reader.Read())
                {
                    usuarioEn = new UsuarioEn();
                    usuarioEn.UsuarioID = Convert.ToInt32(reader.GetValue(0));
                    usuarioEn.Nombre = Convert.ToString(reader.GetValue(1));
                    usuarioEn.ApellidoP = Convert.ToString(reader.GetValue(2));
                    usuarioEn.ApellidoM = Convert.ToString(reader.GetValue(3));
                    usuarioEn.Identificacion = Convert.ToString(reader.GetValue(4));
                    usuarioEn.Login = Convert.ToString(reader.GetValue(5));
                    usuarioEn.Password = Convert.ToString(reader.GetValue(6));
                    usuarioEn.Telefono = Convert.ToString(reader.GetValue(7));
                    usuarioEn.Celular = Convert.ToString(reader.GetValue(8));
                    usuarioEn.Correo = Convert.ToString(reader.GetValue(9));
                    usuarioEn.Direccion = Convert.ToString(reader.GetValue(10));
                    usuarioEn.Estado = Convert.ToInt32(reader.GetValue(11));
                    if (usuarioEn.Estado == 1)
                        usuarioEn.SEstado = "ACTIVO";
                    else
                        usuarioEn.SEstado = "INACTIVO";
                    usuarioEn.TipoUsuarioID = Convert.ToInt32(reader.GetValue(12));
                }

                return usuarioEn;
            }

            catch (SqlException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            finally
            {
                if (reader != null)
                    reader.Close();
                DataBaseFactory.SqlCloseDatabase("PGI");
            }
        }
        public static List<UsuarioEn> Usuario_Listar()
        {
            SqlCommand command = null;
            SqlConnection connection = null;
            SqlDataReader reader = null;

            string sql = "MntUsuarioSListarUsuarios";

            try
            {
                connection = DataBaseFactory.SqlOpenDatabase("PGI");

                command = new SqlCommand(sql, connection);
                command.CommandType = CommandType.StoredProcedure;
                reader = command.ExecuteReader();
                List<UsuarioEn> lista = new List<UsuarioEn>();

                while (reader.Read())
                {
                    UsuarioEn usuarioEn = new UsuarioEn();
                    usuarioEn.UsuarioID = Convert.ToInt32(reader.GetValue(0));
                    usuarioEn.Nombre = Convert.ToString(reader.GetValue(1));
                    usuarioEn.ApellidoP = Convert.ToString(reader.GetValue(2));
                    usuarioEn.ApellidoM = Convert.ToString(reader.GetValue(3));
                    usuarioEn.Identificacion = Convert.ToString(reader.GetValue(4));
                    usuarioEn.Login = Convert.ToString(reader.GetValue(5));
                    usuarioEn.Password = Convert.ToString(reader.GetValue(6));
                    usuarioEn.Telefono = Convert.ToString(reader.GetValue(7));
                    usuarioEn.Celular = Convert.ToString(reader.GetValue(8));
                    usuarioEn.Correo = Convert.ToString(reader.GetValue(9));
                    usuarioEn.Direccion = Convert.ToString(reader.GetValue(10));
                    usuarioEn.Estado = Convert.ToInt32(reader.GetValue(11));
                    if (usuarioEn.Estado == 1)
                        usuarioEn.SEstado = "ACTIVO";
                    else
                        usuarioEn.SEstado = "INACTIVO";
                    usuarioEn.TipoUsuarioID = Convert.ToInt32(reader.GetValue(12));

                    lista.Add(usuarioEn);
                }

                return lista;
            }

            catch (SqlException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            finally
            {
                if (reader != null)
                    reader.Close();
                DataBaseFactory.SqlCloseDatabase("PGI");
            }
        }
        public static int Usuario_Insertar(UsuarioEn usuario)
        {
            SqlCommand command = null;
            SqlConnection connection = null;
            SqlDataReader reader = null;

            string sql = "MntUsuarioIUsuario";

            try
            {
                connection = DataBaseFactory.SqlOpenDatabase("PGI");
                command = new SqlCommand(sql, connection);

                command.CommandType = CommandType.StoredProcedure;
                usuario.UsuarioID = 0;

                command.Parameters.AddWithValue("@Nombre", usuario.Nombre);
                command.Parameters.AddWithValue("@ApellidoP", usuario.ApellidoP);
                command.Parameters.AddWithValue("@ApellidoM", usuario.ApellidoM);
                command.Parameters.AddWithValue("@Identificacion", usuario.Identificacion);
                command.Parameters.AddWithValue("@Login", usuario.Login);
                command.Parameters.AddWithValue("@Password", usuario.Password);
                command.Parameters.AddWithValue("@Telefono", usuario.Telefono);
                command.Parameters.AddWithValue("@Celular", usuario.Celular);
                command.Parameters.AddWithValue("@Correo", usuario.Correo);
                command.Parameters.AddWithValue("@Direccion", usuario.Direccion);
                command.Parameters.AddWithValue("@Estado", usuario.Estado);
                command.Parameters.AddWithValue("@TipoUsuarioID", usuario.TipoUsuarioID);

                command.Parameters.Add("@Resultado", SqlDbType.Int).Direction = ParameterDirection.Output;


                command.ExecuteNonQuery();

                usuario.UsuarioID = Convert.ToInt32(command.Parameters["@Resultado"].Value);

                return usuario.UsuarioID;
            }

            catch (SqlException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            finally
            {
                if (reader != null)
                    reader.Close();
                DataBaseFactory.SqlCloseDatabase("PGI");
            }
        }
        public static int Usuario_Editar(UsuarioEn usuario, bool incluyePassword)
        {
            SqlCommand command = null;
            SqlConnection connection = null;
            SqlDataReader reader = null;

            string sql = "";

            if(incluyePassword)
                sql = "MntUsuarioUUsuarioConPassword";
            else
                sql = "MntUsuarioUUsuarioSinPassword"; 

            try
            {
                connection = DataBaseFactory.SqlOpenDatabase("PGI");
                command = new SqlCommand(sql, connection);

                command.CommandType = CommandType.StoredProcedure;

                command.Parameters.AddWithValue("@UsuarioID", usuario.UsuarioID);
                command.Parameters.AddWithValue("@Nombre", usuario.Nombre);
                command.Parameters.AddWithValue("@ApellidoP", usuario.ApellidoP);
                command.Parameters.AddWithValue("@ApellidoM", usuario.ApellidoM);
                command.Parameters.AddWithValue("@Identificacion", usuario.Identificacion);
                command.Parameters.AddWithValue("@Login", usuario.Login);
                
                if(incluyePassword)
                    command.Parameters.AddWithValue("@Password", usuario.Password);
                
                command.Parameters.AddWithValue("@Telefono", usuario.Telefono);
                command.Parameters.AddWithValue("@Celular", usuario.Celular);
                command.Parameters.AddWithValue("@Correo", usuario.Correo);
                command.Parameters.AddWithValue("@Direccion", usuario.Direccion);
                command.Parameters.AddWithValue("@Estado", usuario.Estado);
                command.Parameters.AddWithValue("@TipoUsuarioID", usuario.TipoUsuarioID);

                command.Parameters.Add("@Resultado", SqlDbType.Int).Direction = ParameterDirection.Output;


                command.ExecuteNonQuery();

                int resultado = Convert.ToInt32(command.Parameters["@Resultado"].Value);

                return resultado;
            }

            catch (SqlException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            finally
            {
                if (reader != null)
                    reader.Close();
                DataBaseFactory.SqlCloseDatabase("PGI");
            }
        }

    }
}
